Sumário

1 Introdução

Quando o assunto é aviação civil e transporte aéreo, vários eventos ou intercorrências podem ocorrer pelo percurso. Formalmente falando, esses eventos podem ser chamados de ocorrências aeronáuticas.

Ocorrência aeronáutica é qualquer evento envolvendo aeronave que poderá ser classificado como incidente, incidente grave ou acidente (link), permitindo ao SIPAER (Sistema de Investigação e Prevenção de Acidentes Aeronáuticos) a adoção dos procedimentos pertinentes.

  • Incidente é toda ocorrência aeronáutica que não chega a se caracterizar como um acidente mas que afeta ou possa afetar a segurança da operação.
  • Incidente grave é um incidente que ocorre sob circunstâncias em que um acidente quase ocorreu.
  • Acidente é uma ocorrência tal que qualquer pessoa sofra lesão grave ou morra.

Dadas essas possíveis classificações de uma ocorrência aeronáutica, é importante conhecer fatores que estão associados a ocorrências aeronáuticas perigosas com objetivos de prevenção.

Gládio - Símbolo  da Força Aérea Brasileira

Gládio - Símbolo da Força Aérea Brasileira

2 Apresentação do problema

  • O trabalho consiste em gerar documentos (relatórios e apresentação) resultantes da exploração da base de dados “Ocorrências Aeronáuticas na Aviação Civil Brasileira”

  • A base de dados é composta por 5 tabelas que são gerenciadas pelo Centro de Investigação e Prevenção de Acidentes Aeronáuticos (CENIPA) - Organização Militar Brasileira vinculada ao Comando da Aeronáutica

  • Para obter as tabelas, consulte o link: https://dados.gov.br/dataset/ocorrencias-aeronauticas-da-aviacao-civil-brasileira

  • As tabelas têm informações sobre: aeronaves envolvidas, fatalidades, local, data, tipo de ocorrência, fatores contribuintes, etc.

Tabelas das ocorrências aeronáuticas

Tabelas das ocorrências aeronáuticas

O nome das tabelas são: OCORRÊNCIA, OCORRÊNCIA_TIPO, AERONAVE, FATOR_CONTRIBUINTE E RECOMENDAÇÃO. Para a realização desse teste, deu-se ênfase às tabelas OCORRÊNCIA e OCORRÊNCIA_TIPO.

3 Explicação do processo utilizado

3.2 Fluxo de trabalho com pacotes da linguagem R

Fluxo de trabalho em Estatística e Ciência de Dados

Fluxo de trabalho em Estatística e Ciência de Dados

Alguns pacotes da linguagem RAlguns pacotes da linguagem RAlguns pacotes da linguagem RAlguns pacotes da linguagem RAlguns pacotes da linguagem RAlguns pacotes da linguagem R

Alguns pacotes da linguagem R

Os dados foram obtidos das tabelas baixadas por meio do site mencionado acima, tratados inicialmente com a linguagem R (base, utils, tibble, dplyr), posteriormente importados para um banco de dados (DBI e RPostgres), analisados através de recursos de estatística descritiva como tabelas e gráficos (base, utils, tibble, dplyr, ggplot2, plotly, highcharter), e finalmente, um relatório (rmarkdown) e uma apresentação (xaringan) foram gerados.

4 Pacotes

#install.packages("box")


box::use(
######## Pacotes básicos
    meth = methods,
    ds = datasets,
    ut = utils,
    grD = grDevices,
    gph = graphics,
    sta = stats,
    grid
)

######## Pacotes adicionais
library(magrittr) # pipe
box::use(
    mg = magrittr,
    rdr = readr,
    tb = tibble,
    dp = dplyr,
    ti = tidyr,
    fc = forcats,
    stg = stringr,
    gg = ggplot2,
    # hc = highcharter,
    geobr,
    pl = plotly,
    dbi = DBI,
    rp = RPostgres,
    kn = knitr,
    hw = htmlwidgets,
    wb = webshot
)

5 Tratamento dos dados originais em R, conexão e criação de banco de dados

5.1 Definindo diretórios e carregando funções auxiliares

endereco_dados <- "../2.Dados_e_recursos/1.Datasets/"
endereco_imagens <- "imagens/"
endereco_graficos_estaticos <- "graficos_estaticos/"
endereco_graficos_interativos <- "graficos_interativos/"
endereco_funcoes_auxiliares <- "funcoes_auxiliares/"
source(paste0(endereco_funcoes_auxiliares,'tabela_metadados.R'),encoding="UTF-8")
source(paste0(endereco_funcoes_auxiliares,'funcoes_analiseunivariada.R'),encoding="UTF-8")
source(paste0(endereco_funcoes_auxiliares,'funcoes_analisebivariada.R'),encoding="UTF-8")
source(paste0(endereco_funcoes_auxiliares,'arruma_grafico_plotly.R'),encoding="UTF-8")
source(paste0(endereco_funcoes_auxiliares,'salva_grafico.R'), encoding = "UTF-8")
source(paste0(endereco_funcoes_auxiliares,'leitura_grafico.R'), encoding = "UTF-8")

5.2 Tabelas principais (ocorrencia e ocorrenciatipo)

ocorrencia.1 <- ut$read.csv2(file=paste0(endereco_dados,"originais/1.ocorrencia.csv"),
                            fileEncoding = 'UTF-8-BOM') %>%
                tb$as_tibble()
ocorrencia.1 %>% dim()
## [1] 5167   22
ocorrencia.1 <- ocorrencia.1 %>%
    dp$select(-('codigo_ocorrencia1':'codigo_ocorrencia4')) %>%
    dp$mutate(divulgacao_dia_publicacao = ifelse(divulgacao_dia_publicacao == "NULL",
                                                     NA,divulgacao_dia_publicacao),
                  ocorrencia_hora = ifelse(ocorrencia_hora == "NULL",
                                           NA,ocorrencia_hora))
ocorrencia.1 %>% dim()
## [1] 5167   18
ocorrencia.1 %>% str()
## tibble [5,167 × 18] (S3: tbl_df/tbl/data.frame)
##  $ codigo_ocorrencia             : int [1:5167] 52242 45331 45333 45401 45407 52243 50713 45334 45391 52244 ...
##  $ ocorrencia_classificacao      : chr [1:5167] "INCIDENTE" "ACIDENTE" "ACIDENTE" "ACIDENTE" ...
##  $ ocorrencia_latitude           : chr [1:5167] "" "-23.4355555556" "***" "***" ...
##  $ ocorrencia_longitude          : chr [1:5167] "" "-46.4730555556" "***" "***" ...
##  $ ocorrencia_cidade             : chr [1:5167] "PORTO ALEGRE" "GUARULHOS" "VIAMÃO" "SÃO SEBASTIÃO" ...
##  $ ocorrencia_uf                 : chr [1:5167] "RS" "SP" "RS" "SP" ...
##  $ ocorrencia_pais               : chr [1:5167] "BRASIL" "BRASIL" "BRASIL" "BRASIL" ...
##  $ ocorrencia_aerodromo          : chr [1:5167] "SBPA" "SBGR" "****" "****" ...
##  $ ocorrencia_dia                : chr [1:5167] "05/01/2012" "06/01/2012" "06/01/2012" "06/01/2012" ...
##  $ ocorrencia_hora               : chr [1:5167] "20:27:00" "13:44:00" "13:00:00" "17:00:00" ...
##  $ investigacao_aeronave_liberada: chr [1:5167] "***" "SIM" "NULL" "***" ...
##  $ investigacao_status           : chr [1:5167] "FINALIZADA" "FINALIZADA" "FINALIZADA" "NULL" ...
##  $ divulgacao_relatorio_numero   : chr [1:5167] "***" "A-582/CENIPA/2014" "A-070/CENIPA/2013" "NULL" ...
##  $ divulgacao_relatorio_publicado: chr [1:5167] "NÃO" "SIM" "SIM" "NÃO" ...
##  $ divulgacao_dia_publicacao     : chr [1:5167] NA "2016-09-01" "2013-11-27" NA ...
##  $ total_recomendacoes           : int [1:5167] 0 3 0 0 0 0 0 0 0 0 ...
##  $ total_aeronaves_envolvidas    : int [1:5167] 1 1 1 1 1 1 1 1 1 1 ...
##  $ ocorrencia_saida_pista        : chr [1:5167] "NÃO" "NÃO" "NÃO" "NÃO" ...
ut$write.table(x = ocorrencia.1,
            file = paste0(endereco_dados,"final/","1.ocorrencia.csv"),
            sep = ";",
            row.names = FALSE,
            fileEncoding = 'UTF-8')
ocorrencia_tipo.2 <- ut$read.csv2(file=paste0(endereco_dados,"originais/2.ocorrencia_tipo.csv"),
                               fileEncoding = 'UTF-8-BOM') %>%
                tb$as_tibble() %>% dp$rename("codigo_ocorrencia" = "codigo_ocorrencia1")
#ocorrencia_tipo.2 %>% dim()


ocorrencia_tipo <- ocorrencia_tipo.2 %>%
                    dp$select('ocorrencia_tipo') %>%
                    dp$distinct() %>%
                    dp$mutate("codigo_ocorrencia_tipo" = 1:dp$n(),
                                  .before = "ocorrencia_tipo")
ocorrencia_tipo %>% dim()
## [1] 81  2
ocorrencia_tipo %>% str()
## tibble [81 × 2] (S3: tbl_df/tbl/data.frame)
##  $ codigo_ocorrencia_tipo: int [1:81] 1 2 3 4 5 6 7 8 9 10 ...
##  $ ocorrencia_tipo       : chr [1:81] "COM PESSOAL EM VOO" "PERDA DE CONTROLE NO SOLO" "FALHA DO MOTOR EM VOO" "ESTOURO DE PNEU" ...
ut$write.table(x = ocorrencia_tipo,
            file = paste0(endereco_dados,"final/","2.ocorrencia_tipo.csv"),
            sep = ";",
            row.names = FALSE,
            fileEncoding = 'UTF-8')

5.3 Tabela de relacionamento (ocorrencia_ocorrencia_tipo)

Como o relacionamento entre as tabelas ocorrencia e ocorrenciatipo é de cardiladidade N:N e os dados posteriormente foram inseridos em um banco de dados, é considerado uma boa prática no mapeamento MER-MR (Modelo Entidade Relacionamento para Modelo Relacional) criar uma tabela de relacionamento.

ocorrencia_ocorrencia_tipo <- dp$left_join(
    x = ocorrencia_tipo.2,
    y = ocorrencia_tipo,
    by = "ocorrencia_tipo"
) %>%
    dp$relocate("codigo_ocorrencia_tipo", .before = "ocorrencia_tipo") %>%
    dp$select("codigo_ocorrencia", "codigo_ocorrencia_tipo")
ocorrencia_ocorrencia_tipo %>% dim()
## [1] 5347    2
ocorrencia_ocorrencia_tipo %>% str()
## tibble [5,347 × 2] (S3: tbl_df/tbl/data.frame)
##  $ codigo_ocorrencia     : int [1:5347] 45331 45332 45333 45334 45390 45391 45392 45393 45393 45396 ...
##  $ codigo_ocorrencia_tipo: int [1:5347] 1 2 3 4 5 3 6 7 2 8 ...
ut$write.table(x = ocorrencia_ocorrencia_tipo,
            file = paste0(endereco_dados,"final/","2.ocorrencia_ocorrencia_tipo.csv"),
            sep = ";",
            row.names = FALSE,
            fileEncoding = 'UTF-8')
############# Criação de banco de dados: ocorrencias

# sudo service postgresql start

# library(DBI)
# library(RPostgres)

con <- dbi$dbConnect(rp$Postgres(),
                 host = "localhost",
                 user = "postgres",
                 password = "123",
                 port = 5432,
                 dbname = "postgres")

# usar para gerar relatório novamente
try(dbi$dbExecute(con, "select pg_terminate_backend(pid)
                        from pg_stat_activity
                        where datname = 'ocorrencias';"))
try(dbi$dbExecute(con, "DROP DATABASE ocorrencias;"))

dbi$dbExecute(con, "CREATE DATABASE ocorrencias;")
con <- dbi$dbConnect(rp$Postgres(),
                 user = "postgres",
                 password = "123",
                 host = "localhost",
                 port = 5432,
                 dbname = "ocorrencias")
############# Criação de tabelas principais (ocorrencia e ocorrenciatipo)


# dbi$dbExecute(con, "CREATE SCHEMA public;")

# dbi$dbExecute(con, "DROP TABLE ocorrencia;")
dbi$dbExecute(con, "CREATE TABLE ocorrencia (
  codigo_ocorrencia INTEGER not null,
  ocorrencia_classificacao VARCHAR(25) not null,
  ocorrencia_latitude VARCHAR(20),
  ocorrencia_longitude VARCHAR(20),
  ocorrencia_cidade VARCHAR(60) not null,
  ocorrencia_uf VARCHAR(5) not null,
  ocorrencia_pais VARCHAR(40) not null,
  ocorrencia_aerodromo VARCHAR(5),
  ocorrencia_dia date not null,
  ocorrencia_hora time,
  investigacao_aeronave_liberada VARCHAR(5),
  investigacao_status VARCHAR(20),
  divulgacao_relatorio_numero VARCHAR(60),
  divulgacao_relatorio_publicado VARCHAR(5),
  divulgacao_dia_publicacao date,
  total_recomendacoes integer,
  total_aeronaves_envolvidas integer not null,
  ocorrencia_saida_pista VARCHAR(5),
  CONSTRAINT ocorrencia_pk PRIMARY KEY (codigo_ocorrencia)
);")

# dbi$dbExecute(con, "DROP TABLE ocorrenciatipo;")
dbi$dbExecute(con,
"CREATE TABLE ocorrenciatipo (
    codigo_ocorrencia_tipo INTEGER not null,
    ocorrencia_tipo VARCHAR(120) not null,
    CONSTRAINT ocorrenciatipo_pk PRIMARY KEY (codigo_ocorrencia_tipo)
);
"
)
############# Criação de tabela de relacionamento (ocorrencia_ocorrenciatipo)

## relações entre as tabelas


# dbi$dbExecute(con, "DROP TABLE ocorrencia_ocorrenciatipo;")
dbi$dbExecute(con,"CREATE TABLE ocorrencia_ocorrenciatipo (
    codigo_ocorrencia INTEGER not null,
    codigo_ocorrencia_tipo INTEGER not null
);
"
)
###### Inserir dados no banco de dados

############# Tabelas principais (ocorrencia e ocorrenciatipo)

# alterar formato de data de mdy para dmy
dbi$dbGetQuery(con,"show datestyle;")
dbi$dbGetQuery(con,"set datestyle = euro;")
dbi$dbGetQuery(con,"show datestyle;")

dbi$dbExecute(con,paste0("COPY ocorrencia(codigo_ocorrencia,
  ocorrencia_classificacao,
  ocorrencia_latitude,
  ocorrencia_longitude,
  ocorrencia_cidade,
  ocorrencia_uf,
  ocorrencia_pais,
  ocorrencia_aerodromo,
  ocorrencia_dia,
  ocorrencia_hora,
  investigacao_aeronave_liberada,
  investigacao_status,
  divulgacao_relatorio_numero,
  divulgacao_relatorio_publicado,
  divulgacao_dia_publicacao,
  total_recomendacoes,
  total_aeronaves_envolvidas,
  ocorrencia_saida_pista)
FROM ",paste0("'",
              normalizePath(endereco_dados,
                            winslash = "/"),
              "/final/"),"1.ocorrencia.csv'

WITH DELIMITER ';'
CSV
HEADER
NULL AS 'NA'
ENCODING 'UTF8';
"))
dbi$dbExecute(con,paste0("COPY ocorrenciatipo (
    codigo_ocorrencia_tipo,
    ocorrencia_tipo)
FROM ",paste0("'",
              normalizePath(endereco_dados,
                            winslash = "/"),
              "/final/"),"2.ocorrencia_tipo.csv'

WITH DELIMITER ';'
CSV
HEADER
NULL AS 'NA'
ENCODING 'UTF8';
"))
############# Tabela de relacionamento (ocorrencia_ocorrencia_tipo)

dbi$dbExecute(con,paste0("COPY ocorrencia_ocorrenciatipo (
    codigo_ocorrencia,
    codigo_ocorrencia_tipo)
FROM ",paste0("'",
              normalizePath(endereco_dados,
                            winslash = "/"),
              "/final/"),"2.ocorrencia_ocorrencia_tipo.csv'

WITH DELIMITER ';'
CSV
HEADER
NULL AS 'NA'
ENCODING 'UTF8';
"))

6 Hipóteses levantadas (Consultas para criação de gráficos e tabelas)

6.1 Q1 – Ocorrem mais incidentes do que acidentes (frequência maior de ocorrências menos graves)?

  • As ocorrências aeronáuticas são classificadas em três categorias: Incidente, Incidente grave e Acidente

    • Incidente é toda ocorrência que não chega a se caracterizar como um acidente mas que afeta ou possa afetar a segurança da operação.

    • Incidente grave é um incidente que ocorre sob circunstâncias em que um acidente quase ocorreu.

    • Acidente é uma ocorrência tal que qualquer pessoa sofra lesão grave ou morra.

#source('funcoes_auxiliares/funcoes_analiseunivariada.R',encoding="UTF-8")
p_ocor_classif <- calcula_tab_frequencia_dplyr(
    tabela_de_entrada = ocorrencia,
    nome_variavel = `ocorrencia_classificacao`,
    specific_order = c("ACIDENTE","INCIDENTE GRAVE", "INCIDENTE")
)

p_ocor_classif$`Category` <- p_ocor_classif$`Category` %>% fc$fct_inorder()

if (kn$is_html_output()) {
    p_ocor_classif
} else {
    p_ocor_classif %>% kn$kable()
}
#################################################################### Cria gráfico

#source('funcoes_auxiliares/funcoes_analiseunivariada.R',encoding="UTF-8")
ggplot2_p_ocor_classif <- grafico_tab_frequencia(
    table_count_prop = p_ocor_classif,
    nome_variavel = "Category",
    cor_grafico = "#77C6D9",
    hjust_e = -0.17,
    hjust_d = 0.15,
    size = 4.5,
    tx1 = 0.05,
    tx2 = 1,
    xlab = "Classificação das ocorrências aeronáuticas",
    ylab = "N° de ocorrências aeronáuticas"
)

#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_p_ocor_classif)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_p_ocor_classif)

Apesar de incidentes (~ 54.4%) ocorrerem mais do que incidentes graves ou acidentes (~ 45.6%), este último número ainda é preocupante. O ideal é que se tenha uma porcentagem mais baixa de incidentes graves e acidentes pois essas são mais danosas.

6.2 Q2 – O número de acidentes tem caído com o passar do tempo?

#source('funcoes_auxiliares/funcoes_analiseunivariada.R',encoding="UTF-8")
p_ocor_ano <- calcula_tab_frequencia_dplyr(
    tabela_de_entrada = (ocorrencia %>%
                            dp$mutate(`ocorrencia_ano` = dp$sql("DATE_PART('year', ocorrencia_dia)"))
                         ),
    nome_variavel = `ocorrencia_ano`,
    specific_order = (ocorrencia %>%
                          dp$mutate(`ocorrencia_ano` = dp$sql("DATE_PART('year', ocorrencia_dia)")) %>%
                          dp$pull(`ocorrencia_ano`) %>%
                          unique() %>% sort())
)

if (kn$is_html_output()) {
    p_ocor_ano
} else {
    p_ocor_ano %>% kn$kable()
}
#################################################################### Cria gráfico

p_ocor_ano[["Category"]] <- as.factor(p_ocor_ano[["Category"]])

ggplot2_p_ocor_ano <- gg$ggplot(gg$aes(
    x = Category,
    y = Frequency,
    group = 1
), data = p_ocor_ano) +
    gg$geom_point(colour='#022634') +
    gg$geom_line(colour='#022634') +
    gg$geom_text(gg$aes(label=paste0(round(Percentage,2),'%'),
                  y=Frequency+0.035*min(Frequency))) +
    gg$xlab('Ano') +
    gg$ylab('N° de ocorrências aeronáuticas') +
    gg$theme_classic()

#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_p_ocor_ano)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_p_ocor_ano)

É possível perceber que o número absoluto de ocorrências aeronáuticas teve uma queda até o ano de 2016 e voltou a subir a partir desse ano.

ocorrencia_aux <- ocorrencia %>%
    dp$mutate(`ocorrencia_ano` = dp$sql("DATE_PART('year', ocorrencia_dia)"))
p_ocor_ano_classif <- calcula_tab_frequencia_bivariada_dplyr(ocorrencia_aux,
                                                             `ocorrencia_ano`,
                                                             `ocorrencia_classificacao`)

if (kn$is_html_output()) {
    p_ocor_ano_classif
} else {
    p_ocor_ano_classif %>% kn$kable()
}
#################################################################### Cria gráfico

# p_ocor_ano_classif[["ocorrencia_ano"]] <-
#     as.factor(p_ocor_ano_classif[["ocorrencia_ano"]])
# p_ocor_ano_classif[, "ocorrencia_classificacao"] <-
#     factor(p_ocor_ano_classif[, "ocorrencia_classificacao"],
#                    levels=c("ACIDENTE","INCIDENTE GRAVE", "INCIDENTE"))

ggplot2_ocor_ano_classif <- gg$ggplot(
    gg$aes(
        x = ocorrencia_ano,
        y = Frequency,
        colour = ocorrencia_classificacao,
        group = ocorrencia_classificacao
    ),
    data = p_ocor_ano_classif
) +
    gg$geom_point() +
    gg$geom_line() +
    gg$ylab('N° de ocorrências aeronáuticas') +
    gg$scale_fill_discrete(name = "Classificação das ocorrências aeronáuticas") +
    gg$theme_classic() +
    gg$geom_text(gg$aes(label = paste0(round(Percentage, 1), "%"),
                                    y = as.numeric(Frequency) + 20)) +
    gg$labs(color='Classificação das ocorr. aeron.') +
    gg$theme(legend.position="top") +
    gg$expand_limits(y = max(p_ocor_ano_classif[['Frequency']]) * 1.2) +
    gg$scale_x_continuous(
        name="Ano",
        labels = as.character(unique(p_ocor_ano_classif$ocorrencia_ano)),
        breaks = unique(p_ocor_ano_classif$ocorrencia_ano)
    )


#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_ano_classif)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_ano_classif)
ggplot2_ocor_ano_classif_lm <- ggplot2_ocor_ano_classif
ggplot2_ocor_ano_classif_lm$layers[[2]] <- NULL # remove gg$geom_line()
ggplot2_ocor_ano_classif_lm <- ggplot2_ocor_ano_classif_lm +
    gg$geom_smooth(data = p_ocor_ano_classif[p_ocor_ano_classif$ocorrencia_ano <= 2016, ],
                   method = sta$lm,
                   se = F,lwd=0.5) + # acrescenta regressão linear por partes (Ano <= 2016)
    gg$geom_smooth(data = p_ocor_ano_classif[p_ocor_ano_classif$ocorrencia_ano > 2016,],
                   method = sta$lm,
                   se = F,lwd=0.5) # acrescenta regressão linear por partes (Ano > 2016)
#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_ano_classif_lm)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_ano_classif_lm)

Nota-se que a tendência geral do número absoluto de ocorrências aeronáuticas também ocorre nas ocorrências de classificação do tipo “INCIDENTE” e em menor grau na classificação do tipo “INCIDENTE GRAVE”, ou seja, há presença de tendência de baixa até 2016 e de alta após o mesmo ano. Comportamento diferente é observado na tendência do número de ocorrências aeronáuticas com classificação do tipo “ACIDENTE” que se manteve em queda desde 2012. Além disso, é importante ressaltar que as somas das frequências relativas de “ACIDENTES” e “INCIDENTES GRAVES” ao longo dos anos variaram com valores mínimo e máximo iguais à 41% em 2013 e 55.2% em 2018, respectivamente.

6.3 Q3 – Ocorrem mais acidentes em estados de maior atividade econômica (Ex.: SP, MG, RJ, PR)?

p_ocor_uf <- calcula_tab_frequencia_dplyr(
    tabela_de_entrada = ocorrencia,
    nome_variavel = `ocorrencia_uf`
)

p_ocor_uf[,'Category'] <- as.character(p_ocor_uf[,'Category'],2)
p_ocor_uf[,'Percentage'] <- round(p_ocor_uf[,'Percentage'],2)
p_ocor_uf <- p_ocor_uf[order(p_ocor_uf[,'Frequency'],decreasing = TRUE),]

if (kn$is_html_output()) {
    p_ocor_uf
} else {
    p_ocor_uf %>% kn$kable()
}
# trocar gráfico de highcharter por outro pacote
# se der erro parecido com:
# Error: parse error: trailing garbage
#          [2804,4640],[2713,4570]]]}}]};
#                     (right here) ------^
# instalar pacote com remotes::install_github("jbkunst/highcharter")
# e tentar novamente

#remotes::install_github("jbkunst/highcharter")
#library(highcharter)

# if (file.exists(paste0(endereco_graficos_interativos, "map.rds"))) {
#     map <- readRDS(file = paste0(endereco_graficos_interativos, "map.rds"))
# } else {
#     map <- hc$get_data_from_map(hc$download_map_data("countries/br/br-all"))
# }
#
# if (file.exists(paste0(endereco_graficos_interativos, "map2.rds"))) {
#     map2 <- readRDS(file = paste0(endereco_graficos_interativos, "map2.rds"))
# } else {
#     map2 <- hc$download_map_data("countries/br/br-all")
# }


# saveRDS(
#     map,
#     file = paste0(
#         endereco_graficos_interativos,
#         "map.rds"
#     )
# )
# saveRDS(
#     map2,
#     file = paste0(
#         endereco_graficos_interativos,
#         "map2.rds"
#     )
# )

# dados <- map[,c("woe-name","hc-a2")] %>%
#     dp$left_join(x=.,y=p_ocor_uf, by = c("hc-a2" = "Category"))


# plot <- hc$highchart(type = "map") %>%
#     #hc$hc_plotOptions(series = list(animation = FALSE)) %>%
#   hc$hc_add_series_map(map = map2,
#                     df = dados,
#                     value = "Frequency",
#                     joinBy = "hc-a2",
#                         dataLabels = list(
#                           enabled = TRUE,
#                           format = "{point.hc-a2}"
#                           )) %>%
#     hc$hc_tooltip(
#     useHTML = TRUE, headerFormat = "",
#     pointFormat = "{point.name} - {point.value} ({point.Percentage}%)"
#   ) %>%
#   hc$hc_title(text = "Ocorrências aeronáuticas por unidade federativa")
#
#
#
# hw$saveWidget(widget = plot, file = paste0(endereco_imagens,"plot.html"))
# if (kn$is_html_output()) {
#     plot
# } else {

    # instalar phantomjs se gráfico não ser gerado em pdf
    # webshot::install_phantomjs(force=T)
    # e também
    # Sys.setenv(OPENSSL_CONF="/dev/null")

    # webshot::webshot(url = paste0(endereco_imagens,"plot.html"),
    #                  file =paste0(endereco_imagens,"plot.png"),
    #                  delay = 0.2,
    #                  zoom=1.5)
# }

# # plot aqui
#
# saveRDS(plot,
#            file = paste0(endereco_graficos_interativos,
#                            substitute(plot),
#                             ".rds"))
if (file.exists(paste0(endereco_graficos_interativos, "map_gbr.rds"))) {
    map_gbr <- readRDS(file = paste0(endereco_graficos_interativos, "map_gbr.rds"))
} else {
    map_gbr <- geobr::read_state(year = 2019,showProgress = FALSE)
    saveRDS(map_gbr, file = paste0(endereco_graficos_interativos, "map.rds"))
}

dados_uf <- dp$left_join(x=dp$rename(map_gbr,UF=abbrev_state),
                         y=p_ocor_uf,
                         by = c("UF" = "Category"))

plot_geobr <- gg$ggplot(data=dados_uf) +
  gg$geom_sf(gg$aes(fill=Frequency)) +
    gg$labs(title="Ocorrências aeronáuticas por unidade federativa", size=8) +
    gg$scale_fill_distiller(palette = "OrRd",
                            name="Frequência",
                            limits = c(0,max(dados_uf$Frequency)),
                            direction = 1) + # reverse colors (1 option)
    gg$theme_minimal() +
    gg$theme(axis.title=gg$element_blank(),
                 axis.text=gg$element_blank(),
                 axis.ticks=gg$element_blank()) +
    gg$geom_sf_text(gg$aes(text=paste0("n: ",
                                       Frequency,
                                       " (",Percentage,"%)"),
                           label=UF),size=2.5)

#
# #################################################################### Salva gráfico
#
# #source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = plot_geobr, arruma_graf_plotly=F)
#
# #################################################################### Leitura gráfico
#
# #source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = plot_geobr)
p_ocor_uf_classif <- calcula_tab_frequencia_bivariada_dplyr(ocorrencia_aux,
                                                             `ocorrencia_uf`,
                                                             `ocorrencia_classificacao`)
p_ocor_uf_classif <- p_ocor_uf_classif %>% dp$arrange(dplyr::desc(sum_Frequency))
p_ocor_uf_classif$`Percentage` <- round(p_ocor_uf_classif$`Percentage`,1)
p_ocor_uf_classif$`ocorrencia_uf` <- fc$fct_inorder(p_ocor_uf_classif$`ocorrencia_uf`)

if (kn$is_html_output()) {
    p_ocor_uf_classif
} else {
    p_ocor_uf_classif %>% kn$kable()
}
ggplot2_ocor_uf_classif1 <- grafico_tab_frequencia_bivariada2(
    p_ocor_uf_classif,
    "ocorrencia_classificacao",
    "ocorrencia_uf",
    tx1 = 0.6,
    tx2 = 1.3,
    size = 3,
    legend = TRUE
) + gg$coord_cartesian(xlim = c(p_ocor_uf_classif[["ocorrencia_uf"]][1],
                        p_ocor_uf_classif[["ocorrencia_uf"]][15])) +
    gg$scale_fill_discrete(name = "Classificação das ocorr. aeron.") +
    gg$theme(legend.position="top") +
    gg$ylab('N° de ocorrências aeronáuticas') +
    gg$xlab('UF')

#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_uf_classif1)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_uf_classif1)
ggplot2_ocor_uf_classif2 <- grafico_tab_frequencia_bivariada3(
    p_ocor_uf_classif,
    "ocorrencia_classificacao",
    "ocorrencia_uf",
    size = 2,
    tx1 = 0.025,
    tx2 = 0.00025,
    legend=FALSE
) + gg$scale_fill_discrete(name = "Classificação das ocorr. aeron.") +
    gg$theme(legend.position="top") +
    gg$ylab('Proporção de ocorrências aeronáuticas') +
    gg$xlab('UF')

#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_uf_classif2, subir_eixo_y = T)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_uf_classif2)

Naturalmente, pelo fato de existir maior movimentação de aviões em estados de alta atividade econômica, esses mesmos têm as maiores quantidades de ocorrências. Porém, são os estados de MT(~56.9%), RR(~55.6%), e SE(~50%) que têm as maiores proporções de acidentes.

6.4 Q4 – Ocorrem mais acidentes na saída da pista?

p_ocor_saida_pista <- calcula_tab_frequencia_dplyr(
    tabela_de_entrada = ocorrencia,
    nome_variavel = `ocorrencia_saida_pista`
)

if (kn$is_html_output()) {
    p_ocor_saida_pista
} else {
    p_ocor_saida_pista %>% kn$kable()
}
#################################################################### Cria gráfico

#source('funcoes_auxiliares/funcoes_analiseunivariada.R',encoding="UTF-8")
ggplot2_p_ocor_saida_pista <- grafico_tab_frequencia(
    table_count_prop = p_ocor_saida_pista,
    nome_variavel = "Category",
    cor_grafico = "#77C6D9",
    hjust_e = -0.17,
    hjust_d = 0.15,
    size = 4.5,
    tx1 = 0.05,
    tx2 = 1,
    xlab = "Ocorrências aeronáuticas na saída de pista",
    ylab = "N° de ocorrências aeronáuticas"
)

#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_p_ocor_saida_pista)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_p_ocor_saida_pista)
p_ocor_saida_pista_classif <- calcula_tab_frequencia_bivariada_dplyr(ocorrencia,
                                                             `ocorrencia_saida_pista`,
                                                             `ocorrencia_classificacao`)

p_ocor_saida_pista_classif$`Percentage` <- round(p_ocor_saida_pista_classif$`Percentage`,1)

if (kn$is_html_output()) {
    p_ocor_saida_pista_classif
} else {
    p_ocor_saida_pista_classif %>% kn$kable()
}
ggplot2_ocor_saida_pista_classif1 <- grafico_tab_frequencia_bivariada2(
    p_ocor_saida_pista_classif,
    "ocorrencia_classificacao",
    "ocorrencia_saida_pista",
    tx1 = 0.3,
    tx2 = 1.3,
    size = 4,
    legend = TRUE
) + gg$scale_fill_discrete(name = "Classificação das ocorr. aeron.") +
    gg$theme(legend.position="top") +
    gg$ylab('N° de ocorrências aeronáuticas') +
    gg$xlab('Ocorrências aeronáuticas na saída de pista')

#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_saida_pista_classif1)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_saida_pista_classif1)
ggplot2_ocor_saida_pista_classif2 <- grafico_tab_frequencia_bivariada3(
    p_ocor_saida_pista_classif,
    "ocorrencia_classificacao",
    "ocorrencia_saida_pista",
    size = 5,
    tx1 = 0.025,
    tx2 = 0.00025,
    legend=FALSE
) + gg$scale_fill_discrete(name = "Classificação das ocorr. aeron.") +
    gg$theme(legend.position="top") +
    gg$ylab('Proporção de ocorrências aeronáuticas') +
    gg$xlab('Ocorrências aeronáuticas na saída de pista')

#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_saida_pista_classif2, subir_eixo_y = T)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_saida_pista_classif2)

Não se observa uma quantidade maior de ocorrências nas saídas de pista, porém a proporção de ocorrências classificadas como acidentes é maior quando se tem uma ocorrência na saída de pista (51.8% > 30.3%).

6.5 Q5 – Quais são os tipos de ocorrência associadas com maior proporção de acidentes?

ocorrenciatipo <- dp$tbl(con, "ocorrenciatipo")
ocorrencia_ocorrenciatipo <- dp$tbl(con, "ocorrencia_ocorrenciatipo")
ocorrencia_ocorrenciatipo_aux <-
    dp$left_join(x = ocorrencia_ocorrenciatipo,
                     y = ocorrenciatipo,
                     by = 'codigo_ocorrencia_tipo') %>%
    dp$left_join(
        x = .,
        y = (
            ocorrencia_ocorrenciatipo %>%
                dp$select(codigo_ocorrencia) %>%
                dp$group_by(codigo_ocorrencia) %>%
                dp$summarise(codigo_ocorrencia_count = dplyr::n())
        ),
        by = 'codigo_ocorrencia'
    ) %>%
    dp$mutate(ocorrencia_tipo_new = ifelse(codigo_ocorrencia_count==1,
                                               ocorrencia_tipo,
                                                (ifelse(codigo_ocorrencia_count==2,
                                                        '2 TIPOS DE OCORRÊNCIA',
                                                        (ifelse(codigo_ocorrencia_count==3,
                                                                '3 TIPOS DE OCORRÊNCIA',
                                                                'NA')) )))) %>%
    dp$select(codigo_ocorrencia, codigo_ocorrencia_tipo, ocorrencia_tipo, ocorrencia_tipo_new) %>%
    as.data.frame()

ocorrencia_ocorrenciatipo_aux1.5 <-ocorrencia_ocorrenciatipo_aux %>% dp$select(codigo_ocorrencia,
                                                        ocorrencia_tipo_new) %>%
            dp$distinct() %>% as.data.frame()

ocorrencia_ocorrenciatipo_aux2 <- ocorrencia %>%
    as.data.frame() %>%
    dp$select(codigo_ocorrencia, ocorrencia_classificacao) %>%
    dp$left_join(
        x = .,
        y = ocorrencia_ocorrenciatipo_aux1.5,
        by = 'codigo_ocorrencia'
    )
p_ocor_ocorrencia_tipo_new <- calcula_tab_frequencia_dplyr(
    tabela_de_entrada = ocorrencia_ocorrenciatipo_aux2,
    nome_variavel = `ocorrencia_tipo_new`
)

p_ocor_ocorrencia_tipo_new <- p_ocor_ocorrencia_tipo_new %>% dp$arrange(dplyr::desc(Frequency))
p_ocor_ocorrencia_tipo_new$`Percentage` <- round(p_ocor_ocorrencia_tipo_new$`Percentage`,1)
p_ocor_ocorrencia_tipo_new[['Category']] <- factor(p_ocor_ocorrencia_tipo_new[['Category']],
                                                   levels=rev(p_ocor_ocorrencia_tipo_new[['Category']]))

if (kn$is_html_output()) {
    p_ocor_ocorrencia_tipo_new
} else {
    p_ocor_ocorrencia_tipo_new %>% kn$kable()
}
#################################################################### Cria gráfico

#source('funcoes_auxiliares/funcoes_analiseunivariada.R',encoding="UTF-8")
ggplot2_p_ocor_ocorrencia_tipo_new <- grafico_tab_frequencia2(
    table_count_prop = p_ocor_ocorrencia_tipo_new,
    nome_variavel = 'ocorrencia_tipo_new',
    cor_grafico = '#77C6D9',
    size = 5,
    tx1 = 1.5,
    tx2 = 1.2
)

ggplot2_p_ocor_ocorrencia_tipo_new <- ggplot2_p_ocor_ocorrencia_tipo_new +
                                        gg$scale_x_discrete(
                                        labels = function(x) {
                                              is_long <- nchar(x) > 25
                                              x[is_long] <- paste0(substr(x[is_long], 1, 25), ".")
                                              x
                                            }
                                          ) +
    gg$coord_flip(xlim=c(p_ocor_ocorrencia_tipo_new[['Category']][1],
                         p_ocor_ocorrencia_tipo_new[['Category']][6])) +
    gg$xlab('Tipo de ocorr. aeron.') +
    gg$ylab('N° de ocorrências aeronáuticas')

#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_p_ocor_ocorrencia_tipo_new)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_p_ocor_ocorrencia_tipo_new)
p_ocor_ocorrencia_tipo_new_classif <- calcula_tab_frequencia_bivariada_dplyr(ocorrencia_ocorrenciatipo_aux2,
                                                             `ocorrencia_tipo_new`,
                                                             `ocorrencia_classificacao`)

p_ocor_ocorrencia_tipo_new_classif <- p_ocor_ocorrencia_tipo_new_classif %>%
                    dp$arrange(match(`ocorrencia_tipo_new`, p_ocor_ocorrencia_tipo_new[['Category']]))
p_ocor_ocorrencia_tipo_new_classif$`Percentage` <- round(p_ocor_ocorrencia_tipo_new_classif$`Percentage`,1)
p_ocor_ocorrencia_tipo_new_classif[['ocorrencia_tipo_new']] <- fc$fct_rev(fc$fct_inorder(
    p_ocor_ocorrencia_tipo_new_classif[['ocorrencia_tipo_new']])
    )

if (kn$is_html_output()) {
    p_ocor_ocorrencia_tipo_new_classif
} else {
    p_ocor_ocorrencia_tipo_new_classif %>% kn$kable()
}
ggplot2_ocor_ocorrencia_tipo_new_classif1 <- grafico_tab_frequencia_bivariada2(
    p_ocor_ocorrencia_tipo_new_classif,
    "ocorrencia_classificacao",
    "ocorrencia_tipo_new",
    tx1 = 1.2,
    tx2 = 1.3,
    size = 3,
    legend = TRUE

) + gg$scale_fill_discrete(name = "Classif. ocor. aeron.") +
    gg$theme(legend.position="top") +
    gg$coord_flip(xlim=c(p_ocor_ocorrencia_tipo_new_classif[['ocorrencia_tipo_new']][1],
                         p_ocor_ocorrencia_tipo_new_classif[['ocorrencia_tipo_new']][20])) +
    gg$scale_x_discrete(
  labels = function(x) {
        is_long <- nchar(x) > 20
        x[is_long] <- paste0(substr(x[is_long], 1, 20), ".")
        x
      }) +
    gg$ylab("N° de ocorrências aeronáuticas") +
    gg$xlab("Tipo de ocorr. aeron.")


#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_ocorrencia_tipo_new_classif1, y=1.075)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_ocorrencia_tipo_new_classif1)
ggplot2_ocor_ocorrencia_tipo_new_classif2 <- grafico_tab_frequencia_bivariada3(
    p_ocor_ocorrencia_tipo_new_classif,
    "ocorrencia_classificacao",
    "ocorrencia_tipo_new",
    size = 2,
    tx1 = 0.025,
    tx2 = 0.00025,
    legend=FALSE
) + gg$scale_fill_discrete(name = "Classif. ocor. aeron.") +
    gg$theme(legend.position="top") +
    gg$coord_flip(xlim=c(p_ocor_ocorrencia_tipo_new_classif[['ocorrencia_tipo_new']][1],
                         p_ocor_ocorrencia_tipo_new_classif[['ocorrencia_tipo_new']][20])) +
    gg$scale_x_discrete(
  labels = function(x) {
        is_long <- nchar(x) > 20
        x[is_long] <- paste0(substr(x[is_long], 1, 20), ".")
        x
      }) +
    gg$ylab('Proporção de ocorrências aeronáuticas') +
    gg$xlab('Tipo de ocorr. aeron.')
#
p_ocor_ocorrencia_tipo_new_classif3 <- p_ocor_ocorrencia_tipo_new_classif
aux <- p_ocor_ocorrencia_tipo_new_classif3 %>%
    dp$filter(`ocorrencia_classificacao` == "ACIDENTE") %>%
    dp$arrange(dplyr::desc(`Percentage`)) %>%
    dp$pull(ocorrencia_tipo_new)
p_ocor_ocorrencia_tipo_new_classif3 <- p_ocor_ocorrencia_tipo_new_classif3 %>%
                    dplyr::arrange(match(`ocorrencia_tipo_new`, aux)) %>%
    dp$mutate(`ocorrencia_tipo_new` = as.character(`ocorrencia_tipo_new`)) %>%
    dp$mutate(`ocorrencia_tipo_new` = ifelse(`ocorrencia_tipo_new` == "", "NULL",
                                             `ocorrencia_tipo_new`)) %>%
    dp$mutate(`ocorrencia_tipo_new` = fc$fct_rev(fc$fct_inorder(`ocorrencia_tipo_new`)))


ggplot2_ocor_ocorrencia_tipo_new_classif3 <- grafico_tab_frequencia_bivariada3(
    p_ocor_ocorrencia_tipo_new_classif3,
    "ocorrencia_classificacao",
    "ocorrencia_tipo_new",
    size = 1.8,
    tx1 = 0.025,
    tx2 = 0.00025,
    legend=FALSE

) + gg$scale_x_discrete(
    labels = function(k) {
        is_long <- nchar(k) > 19
        k[is_long] <- paste0(substr(k[is_long], 1, 19), ".")
        k
    }
) +
    gg$coord_flip(
        xlim = c(
            p_ocor_ocorrencia_tipo_new_classif3[['ocorrencia_tipo_new']][1],
            p_ocor_ocorrencia_tipo_new_classif3[['ocorrencia_tipo_new']][30]
        )
    ) +
    gg$scale_fill_discrete(name = "Classif. ocor. aeron.") +
    gg$theme(legend.position = "top") +
    gg$ylab('Proporção de ocorrências aeronáuticas') +
    gg$xlab('Tipo de ocorr. aeron.')
#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_ocorrencia_tipo_new_classif2, y=1.14)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_ocorrencia_tipo_new_classif2)
#################################################################### Salva gráfico

#source('funcoes_auxiliares/salva_grafico.R', encoding = "UTF-8")
salva_grafico(ggplot2_grafico = ggplot2_ocor_ocorrencia_tipo_new_classif3, y=1.14)

#################################################################### Leitura gráfico

#source('funcoes_auxiliares/leitura_grafico.R', encoding = "UTF-8")
leitura_grafico(ggplot2_grafico = ggplot2_ocor_ocorrencia_tipo_new_classif3)

É possível observar que existem vários tipos de ocorrência, porém alguns tipos são mais propensos a serem classificados como acidentes, tais como: Perda de controle em voo, pane seca, operação a baixa altitude, etc.

7 Conclusões e insights gerados

Apesar de incidentes (~ 54.4%) ocorrerem mais do que incidentes graves ou acidentes (~ 45.6%), este último número ainda é preocupante. O ideal é que se tenha uma porcentagem mais baixa de incidentes graves e acidentes para que pessoas não sofram qualquer lesão corporal.

É possível perceber que o número absoluto de ocorrências aeronáuticas teve uma queda até o ano de 2016 e voltou a subir a partir desse ano. Nota-se que essa tendência também ocorre nas ocorrências de classificação do tipo “INCIDENTE” e em menor grau na classificação do tipo “INCIDENTE GRAVE”. Comportamento diferente é observado na tendência do número de ocorrências aeronáuticas com classificação do tipo “ACIDENTE” que se manteve em queda desde 2012. Além disso, é importante ressaltar que as somas das frequências relativas de “ACIDENTES” e “INCIDENTES GRAVES” ao longo dos anos variaram com valores mínimo e máximo iguais à 41% em 2013 e 55.2% em 2018, respectivamente.

Naturalmente, pelo fato de existir maior movimentação de aviões em estados de alta atividade econômica, esses mesmos têm as maiores quantidades de ocorrências. Porém, são os estados de MT(~56.9%), RR(~55.6%), e SE(~50%) que têm as maiores proporções de acidentes.

Não se observa uma quantidade maior de ocorrências nas saídas de pista, porém a proporção de ocorrências classificadas como acidentes é maior quando se tem uma ocorrência na saída de pista (51.8% > 30.3%).

É possível observar que existem vários tipos de ocorrência, porém alguns tipos são mais propensos a serem classificados como acidentes, tais como: Perda de controle em voo, pane seca, operação a baixa altitude, etc.